package com.jdbc;

import jdk.internal.org.objectweb.asm.tree.analysis.Value;

import javax.xml.transform.Result;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 * @author lenovo
 * @Description
 * @Date2025-2-25 16:35
 * 数据库工具类
 */
public class JDBCUtils {
    //数据库的增删改
    public static int update(String sql,Object... args){
        try(Connection conn=DateSourceUtils.getConnection()) {
            PreparedStatement ps = conn.prepareStatement(sql);
            for (int i = 0;i < args.length;i++){
                ps.setObject(i+1,args[i]);
            }
            int rows=ps.executeUpdate();
            return rows;

        }catch (Exception e ){
            e.printStackTrace();
        }

        return 0;
    }

    //数据库查询
    public static <T>List<T> query(Class<T> clazz,String sql,Object...args){
        try(Connection conn=DateSourceUtils.getConnection()) {
            PreparedStatement ps = conn.prepareStatement(sql);
            //设置参数
            for (int i = 0;i < args.length;i++){
                ps.setObject(i+1,args[i]);
            }
            //创建List集合
            List<T> list = new ArrayList<>();
            //执行查询
            ResultSet resultSet = ps.executeQuery();
            //遍历结果集
            while (resultSet.next()){
                //创建对象
                T obj = clazz.newInstance();
                //获得所有的属性
                Field[] fields = clazz.getDeclaredFields();
                for (Field field : fields){
                    //通过属性名读取读取结果集的值
                    Object value=resultSet.getObject(field.getName());
                    //通过属性访问性
                    field.setAccessible(true);
                    //设置属性的值
                    field.set(obj, value);
                }
                //添加到集合
                list.add(obj);
            }
            return list;

        }catch (Exception e ){
            e.printStackTrace();
        }
        return null;
    }
}
